Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>SQLAlchemy</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/SQLAlchemy"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-SQLAlchemy rootpage-SQLAlchemy skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">SQLAlchemy</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */


.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}


/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><td colspan="2" class="infobox-image logo"><div class="infobox-caption">Abbreviated SQLAlchemy Logo</div></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Programmer" title="Programmer">Original author(s)</a></th><td class="infobox-data">Michael Bayer<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Initial release</th><td class="infobox-data">February&nbsp;14, 2006<span style="display:none">&nbsp;(<span class="bday dtstart published updated">2006-02-14</span>)</span><sup id="cite_ref-releases_2-0" class="reference"><a href="#cite_note-releases-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup></td></tr><tr style="display: none;"><td colspan="2" class="infobox-full-data"></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_release_life_cycle" title="Software release life cycle">Stable release</a></th><td class="infobox-data"><div style="margin:0px;">2.0.41<sup id="cite_ref-wikidata-9986a6598bd01936424ce70755decbbe4c38ced6-v20_3-0" class="reference"><a href="#cite_note-wikidata-9986a6598bd01936424ce70755decbbe4c38ced6-v20-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup>&nbsp;
/ 14 May 2025<span style="display:none">&nbsp;(<span class="bday dtstart published updated">14 May 2025</span>)</span></div></td></tr><tr style="display:none"><td colspan="2">
</td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Repository_(version_control)" title="Repository (version control)">Repository</a></th><td class="infobox-data"><style data-mw-deduplicate="TemplateStyles:r1126788409">
/* start https://en.wikipedia.org/ */


.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}


/* end https://en.wikipedia.org/ */
</style><div class="plainlist"><ul><li><span class="url"><a rel="nofollow" class="external text" href="https://github.com/sqlalchemy/sqlalchemy">github<wbr>.com<wbr>/sqlalchemy<wbr>/sqlalchemy</a></span> </li></ul>
</div></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Written in</th><td class="infobox-data"><a href="Python_(programming_language)" title="Python (programming language)">Python</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Operating_system" title="Operating system">Operating system</a></th><td class="infobox-data"><a href="Cross-platform" class="mw-redirect" title="Cross-platform">Cross-platform</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_categories#Categorization_approaches" title="Software categories">Type</a></th><td class="infobox-data"><a href="Object-relational_mapping" class="mw-redirect" title="Object-relational mapping">Object-relational mapping</a></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;"><a href="Software_license" title="Software license">License</a></th><td class="infobox-data"><a href="MIT_License" title="MIT License">MIT License</a><sup id="cite_ref-license-bitbucket_4-0" class="reference"><a href="#cite_note-license-bitbucket-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup></td></tr><tr><th scope="row" class="infobox-label" style="white-space: nowrap;">Website</th><td class="infobox-data"><span class="url"><a rel="nofollow" class="external text" href="https://www.sqlalchemy.org/">www<wbr>.sqlalchemy<wbr>.org</a></span>&nbsp;<span class="penicon autoconfirmed-show"></span></td></tr></tbody></table>

<p><b>SQLAlchemy</b> is an <a href="Open_source" title="Open source">open-source</a> <a href="Python_(programming_language)" title="Python (programming language)">Python</a> library that provides an <a href="SQL" title="SQL">SQL</a> toolkit (called "SQLAlchemy Core") and an <a href="Object%E2%80%93relational_mapping" title="Object–relational mapping">object–relational mapper</a> (ORM) for database interactions. It allows developers to work with databases using Python objects, enabling efficient and flexible database access.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Description">Description</h2></div>
<p>SQLAlchemy offers tools for <a href="Database_schema" title="Database schema">database schema</a> generation, querying, and object-relational mapping. Key features include:
</p>
<ul><li>A comprehensive embedded <a href="Domain-specific_language" title="Domain-specific language">domain-specific language</a> for SQL in Python called "SQLAlchemy Core" that provides means to construct and execute SQL queries.</li>
<li>A powerful ORM that allows the mapping of Python classes to database tables.</li>
<li>Support for database schema migrations.</li>
<li>Compatibility with multiple database backends.</li>
<li>Tools for <a href="Database_connection" title="Database connection">database connection</a> pooling and transaction management.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="History">History</h2></div>
<p>SQLAlchemy was first released in February 2006. It has evolved to include a wide range of features for database interaction and has gained popularity among Python developers. Notable versions include:
</p>
<ul><li>Version 0.1 (2006):<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> Initial release.</li>
<li>Version 1.0 (2015):<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> Major enhancements in ORM and SQL expression language.</li>
<li>Version 1.4 (2021):<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Introduction of a new ORM <a href="API" title="API">API</a>.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Example">Example</h2></div>
<p>The following example represents an n-to-1 relationship between movies and their directors. It is shown how user-defined Python classes create corresponding database tables, how instances with relationships are created from either side of the relationship, and finally how the data can be queried — illustrating automatically generated SQL queries for both <a href="Lazy_loading" title="Lazy loading">lazy</a> and eager loading.
</p>
<div class="mw-heading mw-heading3"><h3 id="Schema_definition">Schema definition</h3></div>
<p>Creating two Python classes and corresponding database tables in the DBMS:
</p>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span class="kn">from</span><span class="w"> </span><span class="nn">sqlalchemy</span><span class="w"> </span><span class="kn">import</span> <span class="o">*</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">sqlalchemy.ext.declarative</span><span class="w"> </span><span class="kn">import</span> <span class="n">declarative_base</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">sqlalchemy.orm</span><span class="w"> </span><span class="kn">import</span> <span class="n">relation</span><span class="p">,</span> <span class="n">sessionmaker</span>

<span class="n">Base</span> <span class="o">=</span> <span class="n">declarative_base</span><span class="p">()</span>

<span class="k">class</span><span class="w"> </span><span class="nc">Movie</span><span class="p">(</span><span class="n">Base</span><span class="p">):</span>
<span class="n">__tablename__</span> <span class="o">=</span> <span class="s2">"movies"</span>

<span class="nb">id</span> <span class="o">=</span> <span class="n">Column</span><span class="p">(</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">title</span> <span class="o">=</span> <span class="n">Column</span><span class="p">(</span><span class="n">String</span><span class="p">(</span><span class="mi">255</span><span class="p">),</span> <span class="n">nullable</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="n">year</span> <span class="o">=</span> <span class="n">Column</span><span class="p">(</span><span class="n">Integer</span><span class="p">)</span>
<span class="n">directed_by</span> <span class="o">=</span> <span class="n">Column</span><span class="p">(</span><span class="n">Integer</span><span class="p">,</span> <span class="n">ForeignKey</span><span class="p">(</span><span class="s2">"directors.id"</span><span class="p">))</span>

<span class="n">director</span> <span class="o">=</span> <span class="n">relation</span><span class="p">(</span><span class="s2">"Director"</span><span class="p">,</span> <span class="n">backref</span><span class="o">=</span><span class="s2">"movies"</span><span class="p">,</span> <span class="n">lazy</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>

<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">year</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">title</span> <span class="o">=</span> <span class="n">title</span>
<span class="bp">self</span><span class="o">.</span><span class="n">year</span> <span class="o">=</span> <span class="n">year</span>

<span class="k">def</span><span class="w"> </span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Movie(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">year</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">director</span><span class="si">}</span><span class="s2">)"</span>

<span class="k">class</span><span class="w"> </span><span class="nc">Director</span><span class="p">(</span><span class="n">Base</span><span class="p">):</span>
<span class="n">__tablename__</span> <span class="o">=</span> <span class="s2">"directors"</span>

<span class="nb">id</span> <span class="o">=</span> <span class="n">Column</span><span class="p">(</span><span class="n">Integer</span><span class="p">,</span> <span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">Column</span><span class="p">(</span><span class="n">String</span><span class="p">(</span><span class="mi">50</span><span class="p">),</span> <span class="n">nullable</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">unique</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>

<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span>

<span class="k">def</span><span class="w"> </span><span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">"Director(</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">)"</span>

<span class="n">engine</span> <span class="o">=</span> <span class="n">create_engine</span><span class="p">(</span><span class="s2">"dbms://user:pwd@host/dbname"</span><span class="p">)</span>
<span class="n">Base</span><span class="o">.</span><span class="n">metadata</span><span class="o">.</span><span class="n">create_all</span><span class="p">(</span><span class="n">engine</span><span class="p">)</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Data_insertion">Data insertion</h3></div>
<p>One can insert a director-movie relationship via either entity:
</p>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span class="n">Session</span> <span class="o">=</span> <span class="n">sessionmaker</span><span class="p">(</span><span class="n">bind</span><span class="o">=</span><span class="n">engine</span><span class="p">)</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">Session</span><span class="p">()</span>

<span class="n">m1</span> <span class="o">=</span> <span class="n">Movie</span><span class="p">(</span><span class="s2">"Robocop"</span><span class="p">,</span> <span class="mi">1987</span><span class="p">)</span>
<span class="n">m1</span><span class="o">.</span><span class="n">director</span> <span class="o">=</span> <span class="n">Director</span><span class="p">(</span><span class="s2">"Paul Verhoeven"</span><span class="p">)</span>

<span class="n">d2</span> <span class="o">=</span> <span class="n">Director</span><span class="p">(</span><span class="s2">"George Lucas"</span><span class="p">)</span>
<span class="n">d2</span><span class="o">.</span><span class="n">movies</span> <span class="o">=</span> <span class="p">[</span><span class="n">Movie</span><span class="p">(</span><span class="s2">"Star Wars"</span><span class="p">,</span> <span class="mi">1977</span><span class="p">),</span> <span class="n">Movie</span><span class="p">(</span><span class="s2">"THX 1138"</span><span class="p">,</span> <span class="mi">1971</span><span class="p">)]</span>

<span class="k">try</span><span class="p">:</span>
<span class="n">session</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">m1</span><span class="p">)</span>
<span class="n">session</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">d2</span><span class="p">)</span>
<span class="n">session</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
<span class="k">except</span><span class="p">:</span>
<span class="n">session</span><span class="o">.</span><span class="n">rollback</span><span class="p">()</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Querying">Querying</h3></div>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span class="n">alldata</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">Movie</span><span class="p">)</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="k">for</span> <span class="n">somedata</span> <span class="ow">in</span> <span class="n">alldata</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">somedata</span><span class="p">)</span>
</pre></div>
<p>SQLAlchemy issues the following query to the DBMS (omitting aliases):
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">SELECT</span><span class="w"> </span><span class="n">movies</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">movies</span><span class="p">.</span><span class="n">title</span><span class="p">,</span><span class="w"> </span><span class="n">movies</span><span class="p">.</span><span class="k">year</span><span class="p">,</span><span class="w"> </span><span class="n">movies</span><span class="p">.</span><span class="n">directed_by</span><span class="p">,</span><span class="w"> </span><span class="n">directors</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">directors</span><span class="p">.</span><span class="n">name</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">movies</span><span class="w"> </span><span class="k">LEFT</span><span class="w"> </span><span class="k">OUTER</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">directors</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">directors</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">movies</span><span class="p">.</span><span class="n">directed_by</span>
</pre></div>
<p>The output:
</p>
<div class="mw-highlight mw-highlight-lang-python mw-content-ltr" dir="ltr"><pre><span class="n">Movie</span><span class="p">(</span><span class="s1">'Robocop'</span><span class="p">,</span> <span class="mi">1987</span><span class="n">L</span><span class="p">,</span> <span class="n">Director</span><span class="p">(</span><span class="s1">'Paul Verhoeven'</span><span class="p">))</span>
<span class="n">Movie</span><span class="p">(</span><span class="s1">'Star Wars'</span><span class="p">,</span> <span class="mi">1977</span><span class="n">L</span><span class="p">,</span> <span class="n">Director</span><span class="p">(</span><span class="s1">'George Lucas'</span><span class="p">))</span>
<span class="n">Movie</span><span class="p">(</span><span class="s1">'THX 1138'</span><span class="p">,</span> <span class="mi">1971</span><span class="n">L</span><span class="p">,</span> <span class="n">Director</span><span class="p">(</span><span class="s1">'George Lucas'</span><span class="p">))</span>
</pre></div>
<p>Setting <code>lazy=True</code> (default) instead, SQLAlchemy would first issue a query to get the list of movies and only when needed (lazy) for each director a query to get the name of the corresponding director:
</p>
<div class="mw-highlight mw-highlight-lang-sql mw-content-ltr" dir="ltr"><pre><span class="k">SELECT</span><span class="w"> </span><span class="n">movies</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">movies</span><span class="p">.</span><span class="n">title</span><span class="p">,</span><span class="w"> </span><span class="n">movies</span><span class="p">.</span><span class="k">year</span><span class="p">,</span><span class="w"> </span><span class="n">movies</span><span class="p">.</span><span class="n">directed_by</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">movies</span>

<span class="k">SELECT</span><span class="w"> </span><span class="n">directors</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">directors</span><span class="p">.</span><span class="n">name</span>
<span class="k">FROM</span><span class="w"> </span><span class="n">directors</span>
<span class="k">WHERE</span><span class="w"> </span><span class="n">directors</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">%</span><span class="n">s</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1266661725">
/* start https://en.wikipedia.org/ */


.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}


/* end https://en.wikipedia.org/ */
</style>
<ul><li><a href="SQLObject" title="SQLObject">SQLObject</a></li>
<li><a href="Storm_(software)" title="Storm (software)">Storm</a></li>
<li><a href="Pylons_project" title="Pylons project">Pylons</a></li>
<li><a href="TurboGears" title="TurboGears">TurboGears</a></li>
<li><a href="Cubes_(OLAP_server)" title="Cubes (OLAP server)">Cubes (OLAP server)</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */


.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}


/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://techspot.zzzeek.org/">Mike Bayer is the creator of SQLAlchemy and Mako Templates for Python.</a></span>
</li>
<li id="cite_note-releases-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-releases_2-0">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */


.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}


/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.sqlalchemy.org/download.html">"Download - SQLAlchemy"</a>. SQLAlchemy<span class="reference-accessdate">. Retrieved <span class="nowrap">21 February</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-wikidata-9986a6598bd01936424ce70755decbbe4c38ced6-v20-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-wikidata-9986a6598bd01936424ce70755decbbe4c38ced6-v20_3-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://github.com/sqlalchemy/sqlalchemy/releases/tag/rel_2_0_41">"Release 2.0.41"</a>. 14 May 2025<span class="reference-accessdate">. Retrieved <span class="nowrap">1 June</span> 2025</span>.</cite></span>
</li>
<li id="cite_note-license-bitbucket-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-license-bitbucket_4-0">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://bitbucket.org/zzzeek/sqlalchemy/src/775ff3419fa03ddbb1b4b6d7350344b69df461ef/LICENSE">"zzzeek / sqlalchemy / source / LICENSE"</a>. BitBucket<span class="reference-accessdate">. Retrieved <span class="nowrap">21 February</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.sqlalchemy.org/en/20/changelog/changelog_01.html">"0.1 Changelog — SQLAlchemy 2.0 Documentation"</a>. <i>docs.sqlalchemy.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-07-04</span></span>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.sqlalchemy.org/en/20/changelog/changelog_10.html#change-1.0.0">"1.0 Changelog — SQLAlchemy 2.0 Documentation"</a>. <i>docs.sqlalchemy.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-07-04</span></span>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.sqlalchemy.org/en/20/changelog/changelog_14.html#change-1.4.0">"1.4 Changelog — SQLAlchemy 2.0 Documentation"</a>. <i>docs.sqlalchemy.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-07-04</span></span>.</cite></span>
</li>
</ol></div></div>
<dl><dt>Notes</dt></dl>
<ul><li><cite id="CITEREFGift2008" class="citation web cs1">Gift, Noah (12 Aug 2008). <a rel="nofollow" class="external text" href="https://www.ibm.com/developerworks/aix/library/au-sqlalchemy/">"Using SQLAlchemy"</a>. <i>Developerworks</i>. IBM<span class="reference-accessdate">. Retrieved <span class="nowrap">8 Feb</span> 2011</span>.</cite></li>
<li>Rick Copeland, Essential SQLAlchemy, <a href="O'Reilly_Media" title="O'Reilly Media">O'Reilly</a>, 2008, <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&nbsp;<bdi>0-596-51614-2</bdi></li></ul></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-06-09" href="https://en.wikipedia.org/wiki/?title=SQLAlchemy&amp;oldid=1294724957">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>

</body></html>